package advanced.Annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;


/**
 * 通过反射调用的方法 会比正常调用满30倍左右(如果不关掉安全检查)
 * 但是在很多框架中任然会大量使用,  不用太担心它的效率
 */
public class parseAnnotation {
    public static void main(String[] args) {
        try {
            Class clz = Class.forName("advanced.Annotation.Student");//获取类结构,同时包含注解信息
            Annotation[] annotations = clz.getAnnotations();//返回类结构的注解(不是字段上的注解)
            for (Annotation annotation : annotations) {
                System.out.println(annotation);
            }
            //获得类的指定的注解(指定注解的名字)
            L_Table st = (L_Table) clz.getAnnotation(L_Table.class);
            System.out.println(st.value());
            //获得类的属性的注解
            Field[] declaredFields = clz.getDeclaredFields();
            //遍历所有成员属性(字段)的注解,解析其值
            System.out.println("_---------------_");
            for (Field field : declaredFields) {
                Annotation[] fieldAnnotations = field.getAnnotations();
                System.out.println("当前属性是=" + field.getName() + ", 它的注解值为:");
                for (Annotation fa : fieldAnnotations) {
                    L_Field f = (L_Field) fa;
                    System.out.println("clonumName=" + f.columnName() + " type=" + f.type() + " length=" + f.length());
                }
            }


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
